package san.java.day15;

/**
 * Thread类的相关方法:
 *  1. void start(): 启动线程,执行对象的run方法
 *  2. run(): 线程在被调度时执行的方法
 *  3. String getName(): 返回县城名称
 *  4. void setName()
 *  5. static currentThread(): 返回当前线程Thread对象
 *
 *
 * 线程的优先级:
 *  1. 就是哪个线程有较大的概率被执行
 *  2. 优先级使用数组1-10表示,数字越大优先级越高,如果没有设置,默认优先级是5
 *
 *  设置优先级的方法
 *      1. int getPriority()
 *      1. setPriority(int p)
 *
 *  线程让步:
 *      1. static void yield():
 *          1. 暂停当前正在执行的线程, 把执行机会让给优先级相同或者更高的线程
 *          2. 若队列中没有同优先级的线程, 忽略此方法
 *
 *  线程阻塞 join():
 *      1. 当某个程序执行流中调用其他线程的join()方法时,
 *          调用线程将被阻塞,直到join()方法加入的join()线程执行完为止
 *
 *  线程睡眠: static void sleep(long mills)
 *      1. 令当前活动线程在指定的时间段内放弃对CPU的控制,使其他线程有机会被执行,时间到后重新排队
 *      2. 抛出InterruptedException异常
 *
 *  stop(): 强制线程生命期结束
 *
 *  boolean isAlive(): 返回boolean, 判断线程是否还活着
 *
 */

class TestRun1 extends Count implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                e.printStackTrace();
            }
            count++;
        }

    }
}

class TestRun2 extends Count implements Runnable{

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " Runnable线程运行的代码");
        for (int i = 0; i < 100; i++) {
//            if (i % 2 == 0) {
//                Thread.yield();
//            }

            try {
                Thread.sleep(100);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("count: " + count);
        }
    }
}

public class Thread_05 {

    public static void main(String[] args) {
        TestRun1 testRun1 = new TestRun1();
        TestRun2 testRun2 = new TestRun2();
        Thread t0 = new Thread(testRun1);
        Thread t1 = new Thread(testRun2);

        t0.start();
//        t0.join();
        t1.start();


        System.out.println("\n" + t1.isAlive());
        // 强制停止线程. 结束生命期
        t1.stop();
        System.out.println(t1.isAlive());

        // 获取线程优先级
        System.out.println("t0的优先级: " + t0.getPriority());
        t0.setPriority(8);
        System.out.println("t0的优先级: " + t0.getPriority());

        System.out.println("-----------------");
        System.out.println("-----------------");
        System.out.println("-----------------");
    }
}
